# 成功调用9222端口
# 【https://blog.csdn.net/sinat_41774836/article/details/88965281
# WebDriverWait(driver,10).until(method，message="")方法】
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options# 实现无可视化界面的操作,
import pyautogui

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#定义浏览器对象
options = Options()#定义一个option对象
# options.add_argument("headless")#实现无可视化界面的操作,无可视化界面（无头浏览器）
#第一次打开的
# options.add_argument("--remote-debugging-port=9222")
# 之后测试的
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver= webdriver.Edge(options = options)


# driver = webdriver.Edge()
# driver.maximize_window()
driver.set_window_size(800,750) # 设置浏览器大小 单位像素

url="https://baidu.com"
# url="https://www.sciencedirect.com/science/article/pii/S1674200123001293"
driver.get(url)

# driver.get("http://www.baidu.com")
# driver.set_window_size(800,600)
driver.find_element(By.ID,"kw").send_keys("selenium") # WebElement对象 - 1个对象对应1个元素
driver.find_element(By.ID,"su").click() # 带来了内容上的变化
sleep(3)

loc = (By.XPATH,'//a[text()="_一只白嫖的猫的博客-CSDN博客"]')#根据文字查找
# loc = (By.XPATH,'//*[@id="10"]/div/div[1]/h3/a/text()')#已知位置is: [object Text] It should be an element.
# 在设置时间（10s）内，等待之后的代码发生。如果超过设置时间未发生，则抛出异常。在等待期间，每隔一定时间（默认0.5秒)，调用until
# 方法1、成功【注释掉也没关系】
# WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))#visibility窗口中可见
# 方法2、成功【注释掉也没关系】
# WebDriverWait(driver,10).until(EC.presence_of_element_located(loc))

# 找到元素位置后，要执行的操作
a = driver.find_element(*loc)#find 元素对象
print("找到测试元素")

sleep(2)
#js函数-元素对象。scrollIntoView()# 向下滚动至-元素可见【# 向上滚动至-元素可见flase？？？】
# 方法execute_script(“arguments[0].scrollIntoView();”,target)【target为find_element(By.XX)找到的元素对象】
# 方法1、直接跳到目标元素
# driver.execute_script('arguments[0].scrollIntoView(false);',a)#flase底部对齐，默认true顶部对齐
# print("移动到元素element对象的“底端”与当前窗口的“底部”对齐")

# 方法2、每次下滑500，直到目标元素【driver.execute_script(js)】
max_scroll_times=30
scroll_count=0
js = "window.scrollBy(0, 300)"  # 向下滑动500个像素

driver.execute_script(js)

while scroll_count < max_scroll_times:
#     print("正在下滑")
    driver.execute_script(js)
#     try:
#         WebDriverWait(driver,5).until(EC.presence_of_element_located(loc))
#         print("窗口中出现元素")
#         break 
#     except :
    scroll_count+=1    
    sleep(0.2)
sleep(10)
print("点击链接，在新标签打开")
a.click()

#通过Javascript设置浏览器窗口的滚动条位置【左右，上下滚动条】
# 方法，通过坐标控制边距 window.scrollTo(左边距，上边距)
# js = "window.scrollTo(200,450);"
# driver.execute_script(js)



sleep(2)
# driver.close()

# cmd管理员》netstat -ano |findstr 9222
# TCP  127.0.0.1:9222   0.0.0.0:0   LISTENING 3108
# TCP  127.0.0.1:9222   127.0.0.1:49676   FIN_WATI_2 4924
# TCP  127.0.0.1:9222   127.0.0.1:50193   ESTABLISHED 3108
# TCP  127.0.0.1:49676   127.0.0.1:9222   CLOSE_WAIT 2600
# TCP  127.0.0.1:50193   127.0.0.1:9222   ESTABLISHED 6048
# 》tasklist |findstr 3108
# msedge.exe  3108 Console  1  89376K
# msedgedriver.exe  6048 Console  1  10376K
